package recuperativa;

import java.awt.*;
import java.awt.event.*;

public class VentanaPrincipal extends Frame {

    private Panel tablero;
    private Panel panelBotones;
    public int N;
    private Celula[][] celulas;
    private Simulacion simulacion;


    public VentanaPrincipal(int N)
    {
        this.N = N;

        setTitle ("Juego de la vida");
        setSize (500, 500);
        setLayout(new BorderLayout());

        // Para que pueda cerrarse
        addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        });


        // Dos paneles, uno es el tablero y el otro los botones
        tablero = new Panel();
        tablero.setLayout(new GridLayout(N, N));
        generarCelulas();

        panelBotones = new Panel();

        // Agregamos los dos paneles
        add(tablero, BorderLayout.NORTH);
        add(panelBotones, BorderLayout.CENTER);


        // Botones del panel de botones
        Button botonIniciar = new Button("Iniciar");
        Button botonDetener = new Button("Detener");
        Button botonLimpiar = new Button("Limpiar");

        panelBotones.add(botonIniciar);
        panelBotones.add(botonDetener);
        panelBotones.add(botonLimpiar);

        // Accion de esos 3 botones
        botonIniciar.addActionListener(new AccionBoton(1));
        botonDetener.addActionListener(new AccionBoton(2));
        botonLimpiar.addActionListener(new AccionBoton(3));


    }
    
    private void limpiar()
    {
        for (int i=0; i < N ; i++)
        {
            for (int j=0; j < N ; j++)
            {
                celulas[i][j].matar();
            }
        }
    }

    private void iniciar()
    {
        simulacion = new Simulacion(celulas);

        simulacion.corriendo = true;
        simulacion.start();
    }

    private void detener()
    {
        simulacion.corriendo = false;
    }

    

    private void generarCelulas()
    {
        // Creamos las celulas
        celulas = new Celula[N][N];

        for (int i=0; i < N ; i++)
        {
            for (int j=0; j < N ; j++)
            {
                Celula celula = new Celula(i, j);
                celula.boton.addActionListener(new AccionCelula(celula));
                //celula.boton.setLabel(i+","+j);

                celulas[i][j] = celula;

                tablero.add(celula.boton);
            }
        }


    }

    public void mostrar()
    {
        setVisible(true);
    }


    class AccionBoton implements ActionListener
    {
        int boton;

        public AccionBoton(int boton)
        {
            this.boton = boton;
        }

        public void actionPerformed(ActionEvent ae)
        {
            switch (boton)
            {
                case 1:
                    System.out.println("Boton iniciar apretado");
                    iniciar();
                    break;
                case 2:
                    System.out.println("Boton detener apretado");
                    detener();
                    break;
                case 3:
                    System.out.println("Boton limpiar apretado");
                    limpiar();
                    break;
            }

        }
    }

    class AccionCelula implements ActionListener
    {
        Celula celula;

        public AccionCelula(Celula celula)
        {
            this.celula = celula;
        }

        public void actionPerformed(ActionEvent ae)
        {
            System.out.println("Boton apretado de celula ("+ celula.fila +", "+ celula.col +")");

            celula.invertir();
        }
    }

}



